gtkmenu: ignore emulated scroll events
authorOlivier Fourdan <ofourdan@redhat.com>
Tue, 3 May 2016 14:44:14 +0000 (16:44 +0200)
committerOlivier Fourdan <ofourdan@redhat.com>
Tue, 10 May 2016 13:58:02 +0000 (15:58 +0200)
On X11, we get both smooth and emulated scroll events, whereas other
backends such as wayland will give smooth events only with touchpad
scrolling.

Discard emulated scroll events so that we get consistent behaviours
between backends.

Allow for both horizontal and vertical smooth events for scrolling so
that horizontal scrolling still works without emulated scroll events as
well, again for consistency between gdk backends.

https://bugzilla.gnome.org/show_bug.cgi?id=765939

gtk/gtkmenu.c

index c4c84313ccb62bef0ed41762a6e4b22a7a456ec2..ee24b724cc3e87f35aa31c9ec1cffdf166e3194a 100644 (file)
 
 #include  <gobject/gvaluecollector.h>
 
+#include <gdk/gdkprivate.h> /* for _gdk_event_get_pointer_emulated() */
+
 #include "gtkaccellabel.h"
 #include "gtkaccelmap.h"
 #include "gtkadjustment.h"
@@ -3554,6 +3556,9 @@ gtk_menu_scroll (GtkWidget      *widget,
 {
   GtkMenu *menu = GTK_MENU (widget);
 
+  if (_gdk_event_get_pointer_emulated ((GdkEvent *) event))
+    return FALSE;
+
   switch (event->direction)
     {
     case GDK_SCROLL_RIGHT:
@@ -3565,7 +3570,7 @@ gtk_menu_scroll (GtkWidget      *widget,
       gtk_menu_scroll_by (menu, - MENU_SCROLL_STEP2);
       break;
     case GDK_SCROLL_SMOOTH:
-      gtk_menu_scroll_by (menu, event->delta_y);
+      gtk_menu_scroll_by (menu, event->delta_y * MENU_SCROLL_STEP2);
       break;
     }